package stack;

import java.util.Stack;

/**
 * 有效的括号(简单) -20
 * @author yyz
 * @create 2023-11-07 9:11
 */
public class Leetcode20 {
    private boolean isValid(String s) {
        int len = s.length(); // 获取字符串的长度
        if (len % 2 == 1) { // 如果字符串长度为奇数，返回false（括号必须成对出现）
            return false;
        }

        Stack<Character> stack = new Stack<>(); // 创建一个字符类型的栈

        for (int i = 0; i < s.length(); i++) { // 遍历输入的字符串
            char c = s.charAt(i); // 获取字符串中索引为i的字符
            if (c == '{' || c == '(' || c == '[') { // 如果是左括号，压入栈中
                stack.push(c);
            } else if (c == '}' || c == ')' || c == ']') { // 如果是右括号
                if (stack.isEmpty()) { // 如果栈为空，说明之前没有对应的左括号，返回false
                    return false;
                }
                Character top = stack.pop(); // 弹出栈顶元素
                if (c == '}' && top != '{' || // 检查弹出的左括号与当前右括号是否匹配
                        c == ')' && top != '(' ||
                        c == ']' && top != '[') {
                    return false; // 不匹配则返回false
                }
            }
        }

        return stack.isEmpty(); // 最终检查栈是否为空，如果为空则说明所有括号匹配，返回true；否则返回false

    }
}
